import re
def main():
    while True:
        str = input("请输入长度小于255的字符串:")
        if len(str)>255:
            print("数据大于预设长度，请重新输入")
        elif len(str)==0:
            print("数据长度不可为0，请重新输入:")
        else:
            break
    #留英文
    x=letter(str)
    #反转
    y=reverse(x)
    #进行凯撒加密
    final_str=caesar_cipher(y)
    print("加密后的密文为:",final_str)
    #解密
    solve_str=caesar_cipher(final_str,-3)
    print("解密后的明文为:",solve_str)
#保留英文
def letter(str):
    """只保留英文字母"""
    return re.sub(r'[^a-zA-Z]', '', str)

#进行反转
def reverse(x):
    reversed_text=''
    for char in x:
        reversed_text = char + reversed_text
    return reversed_text

#凯撒加密法
def caesar_cipher(y, shift=3):
    """凯撒加密，默认偏移3位"""
    result = []
    for char in y:
        if char.isupper():
            # 大写字母加密：A(65)~Z(90)
            result.append(chr((ord(char) - 65 + shift) % 26 + 65))
        elif char.islower():
            # 小写字母加密：a(97)~z(122)
            result.append(chr((ord(char) - 97 + shift) % 26 + 97))
    return ''.join(result)

if __name__ == '__main__':
    main()
